<!--
 Access control component for fine-grained access control.
 TODO: 可以扩展更完善的功能：
 1. 支持多个权限码，只要有一个权限码满足即可 或者 多个权限码全部满足
 2. 支持多个角色，只要有一个角色满足即可 或者 多个角色全部满足
 3. 支持自定义权限码和角色的判断逻辑
-->
<template>
  <slot v-if="!codes"></slot>
  <slot v-else-if="hasAccess"></slot>
</template>

<script lang="ts" setup>
  import { computed } from 'vue';

  import { useAuth } from '@/hooks/useAuth';

  import { eaAuthorityProps } from './types';

  defineOptions({
    name: 'ea-authority',
    options: {
      virtualHost: true,
      addGlobalClass: true,
      styleIsolation: 'shared',
    },
  });

  const { hasAuth, authType } = useAuth();

  const props = withDefaults(defineProps<eaAuthorityProps>(), {
    codes: () => [],
    type: authType,
  });

  const hasAccess = computed(() => {
    const { type, codes } = props;
    return hasAuth(codes, type);
  });
</script>
